package org.ala.tiktools.sharddb.mybatis.spring;

/**
 * 分表配置信息
 * <p>  需要修改配置new一个Bean即可
 *
 * @author ala
 * @date 2025-02-17 14:19
 */
public class ShardMyBatisConfigInfo {


    /**
     * 默认的线程池配置
     * <p> 如果一次sql中发现需要去多个分表执行sql，每个分表sql用独立线程执行
     * <p> 当线程不够时，退化为串行，用当前线程执行
     * <p> 该线程池仅针对查询，事务操作用本地分布式事务的线程池
     */
    public static final int DEFAULT_CORE_SIZE = 5, DEFAULT_MAX_SIZE = 10, DEFAULT_QUEUE_SIZE = 1024;
    /**
     * 默认分表执行超时时间
     * <p> 如果一次sql中发现需要去多个分表执行sql，每个分表sql用独立线程执行
     * <p> 这里的超时时间相对于每个分表sql执行（每个sql还受限于mybatis超时时间控制）
     */
    public static final long DEFAULT_TIMEOUT = 10000l;


    /**
     *  分表执行线程池配置
     *  <p> 如果一次sql中发现需要去多个分表执行sql，每个分表sql用独立线程执行
     *  <p> 当线程不够时，退化为串行，用当前线程执行
     */
    protected int coreSize = DEFAULT_CORE_SIZE, maxSize = DEFAULT_MAX_SIZE, queueSize = DEFAULT_QUEUE_SIZE;
    /**
     * 默认分表执行超时时间
     * <p> 如果一次sql中发现需要去多个分表执行sql，每个分表sql用独立线程执行
     * <p> 这里的超时时间相对于每个分表sql执行（每个sql还受限于mybatis超时时间控制）
     */
    public long timeout = DEFAULT_TIMEOUT;


    public int getCoreSize() {
        return coreSize;
    }

    public void setCoreSize(int coreSize) {
        this.coreSize = coreSize;
    }

    public int getMaxSize() {
        return maxSize;
    }

    public void setMaxSize(int maxSize) {
        this.maxSize = maxSize;
    }

    public int getQueueSize() {
        return queueSize;
    }

    public void setQueueSize(int queueSize) {
        this.queueSize = queueSize;
    }

    public long getTimeout() {
        return timeout;
    }

    public void setTimeout(long timeout) {
        this.timeout = timeout;
    }
}
